디자인 패턴개요
디자인 패턴이란?
디자인 패턴의 탄생배경 Story
- 소프트웨어 설계 방법론과 지침을 통한 공유
- 접근의 한계가 있으며, 방법론이나 지침은 일반화된 것이어서 구체적인 문제에 적용하기 위해서는 또다른 지식이 필요
- 사례를 통한 공유
- 사례는 너무 구체적이고 특정 문제의 가정에 의존
-> 위의 두자지 모두 한계점이 있으며, 일반적이지도 구체적이지도 않은 형태의 소프트웨어 설계를 위한 지침을 고민하면서 생긴것이 디자인 패턴이다.
디자인 패턴이란
소프트웨어를 설계할 때 특정 맥락에서 자주 발생하는 고질적인 문제들이 또 발생했을 때 재사용할 수 있는 훌륭한 해결책이다.
패턴이란
- 각기 다른 소프트웨어 모듈이나 기능을 가진 다양한 응용 소프트웨어 시스템들을 개발할 때도 서로 간에 공통되는 설계문제가 존재하며 이를 처리하는 해결책 사이에도 공통점이 있다. 이러한 유사점을 패턴이라 한다.
- 패턴은 공통의 언어를 만들어주며 팀원 사이의 의사 소통을 원활하게 해주는 아주 중요한 역할을 한다.
GoF(Gang of Fout) 디자인 패턴
- 에리히 감마, 리차드헤름, 랄프 존슨, 존 블리시디스
- 소프트웨어 개발 영역에서 디자인패턴을 구체화하고 체계화한 사람들
- 23가지의 디자인 패턴을 정리하고 각각의 디자인 패턴을 생성, 구조, 행위 3가지로 분류했다.
GoF 디자인 패턴의 분류
생성(Creational)패턴 구조(Structural)패턴 행위(Behavioral)패턴 - 추상 팩토리(Abstract Factory)
- 빌더(Builder)
- 팩토리 메서드(Factory Methods)
- 프로토타입(Prototype)
- 싱글턴(Singleton)- 어댑터(Adapter)
- 브리지(Bridge)
- 컴포지트(Composite)
- 데코레이터(Decorator)
- 퍼사드(Facade)
- 플라이웨이트(Flyweight)
- 프록시(Proxy)- 책임 연쇄(Chain of Responsibility)
- 커맨드(Command)
- 인터프리터(Interpreter)
- 이터레이터(Iterator)
- 미디에이터(Mediator)
- 메멘토(Memento)
- 옵서버(Observer)
- 스테이트(State)
- 스트래티지(Strategy)
- 템플릿 메서드(Template Method)
- 비지터(Visitor)
생성패턴(Creational):
- 객체 생성에 관련된 패턴
- 객체의 생성과 조합을 캡슐화해 특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성을 제공한다.
구조패턴(Structural):
- 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴
- 예를 들어 서로 다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스를 제공하거나 객체들을 서로 묶어 새로운 기능을 제공하는 패턴이다.
행위패턴(Behavioral):
- 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴
- 한 객체가 혼자 수행할 수 없는 작업을 여러 개의 객체로 어떻게 분배하는지, 또 그렇게 하면서도 객체 사이의 결합도를 최소화 하는것에 중점을 둔다.
관련 면접 질문
디자인 패턴을 사용하는 이유는 무엇인가요?
-> 근본적인 이유는 문제 해결방법의 가장 좋은 방식을 사용하기 위함이고, 재사용성을 높이고 변경을 쉽게 하도록 하는 구조를 가짐으로써 커뮤니케이션을 할때에도 구체적인 설명 없이 구조화된 패턴에 대한 사전 지식으로 이해가 수월하다.
객체지향과 절차지향에서 어느 쪽에 더 사용이 되는가요?
-> 객체지향에서 더 사용이 됩니다. 디자인 패턴이 발달한 배경에는 객체지향 프로그래밍이 지향하는 방향과 좋은 프로그램은 무엇인지에 대한 고찰을 기반으로 만들어 진것입니다. 각 패턴 별로 용도를 확인해보면 객체지향에 초점이 맞춰져 있는것을 확인할 수 있습니다.
참고자료:
기여자
Youngwoo Kim
📦